﻿using System;
using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;
using Neturion.Utils;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioAgencia
    {
        private IRepositorioAgencia _repositorioAgencia;

        /// <summary>
        /// 
        /// </summary>
        public NegocioAgencia()
        {
            _repositorioAgencia = new RepositorioAgencia();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="agencia"></param>
        /// <returns></returns>
        public Agencia Inserir(Agencia agencia)
        {
            //Se não for passado o Código
            if (String.IsNullOrEmpty(agencia.Codigo))
            {
                agencia.Codigo = GeradorCodigo.GerarCodigo(1);
                agencia.Codigo += (_repositorioAgencia.ObterUltimoIdCodigoInteiro() + 1).ToString();
                agencia.Codigo += GeradorCodigo.GerarCodigo(1, agencia.Codigo);
            }
            return _repositorioAgencia.Inserir(agencia);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="agencia"></param>
        /// <returns></returns>
        public Agencia Atualizar(Agencia agencia)
        {
            return _repositorioAgencia.Atualizar(agencia);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="agencia"></param>
        public void Excluir(Agencia agencia)
        {
            Agencia agenciaTmp = ObterPorId(agencia.AgenciaId);
            _repositorioAgencia.Excluir(agenciaTmp);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Agencia> ObterTodos(int inicio, int quantidade, int quantidadeMinima, Usuario usuarioPermissao,
            string codigo, string numeroAgencia, Pessoa gerente, Banco banco, DateTime? inicioVigenciaDe, DateTime? inicioVigenciaAte,
            DateTime? fimVigenciaDe, DateTime? fimVigenciaAte)
        {
            return _repositorioAgencia.ObterTodos(inicio, quantidade, quantidadeMinima, codigo, numeroAgencia, gerente, 
                                                    banco, inicioVigenciaDe, inicioVigenciaAte, fimVigenciaDe, fimVigenciaAte);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Agencia ObterPorId(int id)
        {
            return _repositorioAgencia.ObterPorId(id);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="numero"></param>
        /// <returns></returns>
        public IList<Agencia> ObterAgenciaPorNumero(string numero)
        {
            return _repositorioAgencia.ObterAgenciaPorNumero(numero);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public Agencia ObterPorCodigo(string codigo)
        {
            return _repositorioAgencia.ObterPorCodigo(codigo);
        }
    }
}